//using System;
//using Microsoft.SPOT;
//using System.IO;
//using Microsoft.SPOT.Hardware;
//using GHIElectronics.Hardware;
//using System.Threading;
//using System.IO.Ports;

//namespace BoardCheckout
//{
//    class Telit
//    {
//        SerialPort telit;
//        bool status = false, have3Dfix = false;
//        OutputPort telitPower;
//        string cnum = "", curBuf = "", gpsp = "";
//        long flen = 0;

//        byte[] r;

//        public Telit(SerialPort port)
//        {
//            telit = port;
//            if (!telit.IsOpen)
//            {
//                telit.ReadTimeout = 50;
//                telit.Open();
//            }



//            telitPower = new OutputPort(USBizi.Pins.E16x, true);
//            getOK(200);

//            bool on = PowerOn();
//            if (on)
//            {
//                TelitWrite("AT#BND=1\r");
//                getOK(25);
//                GetCGSN();
//                status = SetupISP();
//            }

//        }

//        public bool TelitOK()
//        {
//            getOK(200);

//            bool on = PowerOn();
//            if (on)
//            {
//                TelitWrite("AT#BND=1\r");
//                getOK(25);
//                GetCGSN();
//                status = SetupISP();
//            }
//            return on;
//        }

//        public bool Has3DFix
//        {
//            get
//            {
//                return have3Dfix;
//            }
//        }

//        //public string GetGPSP()
//        //{
//        //    GetGPSACP();
//        //    return gpsp;
//        //}

//        public string GetID()
//        {
//            return cnum;
//        }

//        public bool GetStatus()
//        {
//            return status;
//        }

//        public string Latitude
//        {
//            get;
//            set;
//        }

//        public string Longitude
//        {
//            get;
//            set;
//        }

//        //$GPSACP:<UTC>,<latitude>,<longitude>,<hdop>,<altitude>,<fix>,
//        //<cog>, <spkm>,<spkn>,<date>,<nsat> 
//        //$GPSACP: 182857.999,3509.6995N,10635.9855W,1.2,1569.6,3,241.88,0.36,0.19,200509,07
//        public void GetGPSACP()
//        {
//            TelitWrite("AT$GPSACP\r");
//            getOK(265);
//            if (curBuf.IndexOf("$GPSACP") > -1)
//            {
//                try
//                {
//                    string[] spl = curBuf.Split(':');
//                    spl = spl[1].Split(',');
//                    gpsp = spl[1] + "," + spl[2] + "," + spl[7];
//                    Latitude = GPS.GPS.ParseLatitude(spl[1]);
//                    Longitude = GPS.GPS.ParseLongitude(spl[2]);
//                    //hhmmss
//                    //ddmmyy
//                    if (spl[5] == "3")
//                    {
//                        have3Dfix = true;

//                        int yy = int.Parse(spl[9].Trim().Substring(4, 2));
//                        int mm = int.Parse(spl[9].Trim().Substring(2, 2));
//                        int dd = int.Parse(spl[9].Trim().Substring(0, 2));
//                        int hh = int.Parse(spl[0].Trim().Substring(0, 2));
//                        int mn = int.Parse(spl[0].Trim().Substring(2, 2));
//                        int ss = int.Parse(spl[0].Trim().Substring(4, 2));

//                        DateTime now = new DateTime(yy, mm, dd, hh, mn, ss);
//                        Utility.SetLocalTime(now);
//                    }
//                    else
//                    {
//                        have3Dfix = false;
//                    }

//                }
//                catch (Exception ex)
//                {
//                    Debug.Print(ex.Message + "\r\n");
//                }
//            }
//        }

//        private void GetCGSN()
//        {
//            TelitWrite("AT+CGSN\r");
//            getOK(65);
//            if (curBuf.IndexOf("+CGSN") > -1)
//            {
//                string[] spl = curBuf.Split('\r');
//                cnum = spl[2].Trim();
//            }
//        }

//        private bool GPRSConnect()
//        {
//            TelitWrite("AT#GPRS=1\r");
//            return getOK(75);
//        }

//        private bool SocketDial()
//        {
//            TelitWrite("AT#SKTD=0,80,\"207.188.148.82\"\r");
//            string ss = String.Empty;
//            return GetExpect("CONNECT", ref ss);
//        }

//        //public bool SendUpdate(string update, string address, bool getCfg)
//        //{
//        //    bool con = false;
//        //    int cnt = 0;
//        //    while (!con && cnt < 15)
//        //    {
//        //        con = GPRSConnect();
//        //        if (!con)
//        //        {
//        //            TelitWrite("AT#SERVINFO\r");
//        //            getOK(85);
//        //            if (cnt == 0)
//        //            {
//        //                TelitWrite("AT#GPRS=0\r");
//        //                getOK(25);
//        //            }
//        //        }
//        //        Thread.Sleep(5000);
//        //        cnt++;
//        //    }

//        //    if (con)
//        //    {
//        //        con = false;
//        //        cnt = 0;
//        //        while (!con && cnt < 3)
//        //        {
//        //            con = SocketDial();
//        //            Thread.Sleep(3000);
//        //            cnt++;
//        //        }
//        //    }

//        //    if (con)
//        //    {
//        //        byte[] buf = System.Text.Encoding.UTF8.GetBytes(update);
//        //        update = "";
//        //        update = null;
//        //        string hex = Util.ByteArrayToHexString(buf);
//        //        buf = System.Text.Encoding.UTF8.GetBytes(hex);

//        //        if (getCfg)
//        //        {
//        //            TelitWrite("GET /yarddata/data.aspx?cfg=" + GetID());
//        //            p.DebugPrint("GET /yarddata/data.aspx?cfg=");
//        //            TelitWrite(" HTTP/1.0\r\n\r\n");
//        //            p.DebugPrint(" HTTP/1.0\r\n\r\n");
//        //        }
//        //        else
//        //        {


//        //            TelitWrite("GET /yarddata/data.aspx?bskt=");
//        //            p.DebugPrint("GET /yarddata/data.aspx?bskt=");

//        //            for (int i = 0; i < buf.Length; i++)
//        //            {
//        //                TelitWrite(Util.ByteToHex(buf[i]));
//        //                //Debug.Print(s);
//        //            };




//        //        TelitWrite(" HTTP/1.0\r\n\r\n");
//        //        p.DebugPrint(" HTTP/1.0\r\n\r\n");
//        //            //try
//        //            //{
//        //            //    //System.IO.FileInfo fi = new System.IO.FileInfo(@"\SD\rf.txt");
//        //            //    //flen = (fi.Length) + 29+78 +3;
//        //            //    //fi = null;
//        //            //    TelitWrite("POST /yarddata/data.aspx HTTP/1.0\r\n");
//        //            //    TelitWrite("Content-Type: multipart/form-data, boundary=fDfqKJpCpL1RlAK1QXXNPTvK4N85EVRn\r\n");
//        //            //    //29 + 78 + fileLength

//        //            //    TelitWrite("Content-Length: " + flen.ToString() + "\r\n\r\n");
//        //            //    //fi = null;
//        //            //    TelitWrite("--fDfqKJpCpL1RlAK1QXXNPTvK4N85EVRn\r\n");
//        //            //    TelitWrite("Content-Disposition: form-data; name=\"rfid\"; filename=\"rf.txt\"\r\n");
//        //            //    TelitWrite("Content-Type: text/plain\r\n\r\n");

//        //            //    byte[] rd = new byte[1];
//        //            //    System.IO.FileStream fs = System.IO.File.Open(@"\SD\rf.txt", System.IO.FileMode.Open);
//        //            //    while (fs.Read(rd, 0, 1) > 0)
//        //            //    {
//        //            //       telit.Write(rd, 0, 1);
//        //            //    }
//        //            //    fs.Close();
//        //            //    fs.Dispose();
//        //            //    TelitWrite("\r\n--fDfqKJpCpL1RlAK1QXXNPTvK4N85EVRn--");
//        //            //    TelitWrite("AT#GPRS=0\r");
//        //            //    System.IO.File.Delete(@"\SD\rf.txt");
//        //            //}
//        //            //catch(Exception ex)
//        //            //{
//        //            //    Debug.Print(ex.Message);
//        //            //    return false;
//        //            //}

//        //            //for (int i = 0; i < buf.Length; i++)
//        //            //{
//        //            //    TelitWrite(Util.ByteToHex(buf[i]));
//        //            //    //Debug.Print(s);
//        //            //};
//        //        }




//        //        //hex.Clear();

//        //        //buf2 = System.Text.Encoding.UTF8.GetBytes("Connection: keep-alive\r\n\r\n");
//        //        //telit.Write(buf2, 0, buf2.Length);
//        //        //telit.Flush();

//        //        if (getCfg)
//        //        {
//        //            string cfg = String.Empty;
//        //            int cntCfg = 0;
//        //            while (!GetExpect("###", ref cfg) && cntCfg < 3)
//        //            {
//        //                cntCfg++;
//        //            }

//        //            string[] cfgg = cfg.Split('|');
//        //            cfg = null;

//        //            //dest_ip|dest_address|update_address|rssi|update_interval|scan_interval|scan_duration|is_active
//        //            if (cfgg.Length == 10)
//        //            {
//        //                p.settings.dest_ip = cfgg[1];
//        //                p.settings.dest_address = cfgg[2];
//        //                p.settings.update_ip = cfgg[3];
//        //                p.settings.update_address = cfgg[4];
//        //                p.settings.rssi_min = int.Parse(cfgg[5]);
//        //                p.settings.update_interval = int.Parse(cfgg[6]);
//        //                p.settings.scan_duration = int.Parse(cfgg[8]);
//        //                p.settings.scan_interval = int.Parse(cfgg[7]);
//        //                p.settings.isActive = cfgg[9].ToLower().TrimEnd(new char[] { '#' }) == "true";

//        //                try
//        //                {
//        //                    using (System.IO.FileStream fs = new System.IO.FileStream( @"\SD\set.txt", System.IO.FileMode.OpenOrCreate))
//        //                    {
//        //                        for (int i = 1; i < cfgg.Length; i++)
//        //                        {
//        //                            byte[] sett = System.Text.Encoding.UTF8.GetBytes("|" + cfgg[i]);
//        //                            fs.Write(sett, 0, sett.Length);
//        //                            fs.Flush();
//        //                        }
//        //                        fs.Close();
//        //                    }

//        //                }
//        //                catch (Exception ex) { Debug.Print(ex.Message); }
//        //                cfgg = null;
//        //            }

//        //        }

//        //        getOK(500);

//        //        TelitWrite("AT#GPRS=0\r");
//        //        getOK(15);
//        //        return true;
//        //    }
//        //    return false;
//        //}

//        private bool GetExpect(string expect, ref string dataRead)
//        {
//            string rd = "";
//            byte[] r = new byte[1];
//            int cnt = 0;
//            bool gotit = false;
//            while (rd.IndexOf(expect) < 0 && cnt < expect.Length + 320)
//            {
//                if (rd.IndexOf("ERROR") > -1)
//                {
//                    return false;
//                }
//                telit.Read(r, 0, 1);
//                rd += (char)r[0];
//                cnt++;
//            }
//            //  p.DebugPrint("TELIT: " + rd + "\n\r\n");
//            if (rd.IndexOf(expect) > 0)
//            {
//                gotit = true;
//            }
//            if (dataRead != null)
//            {
//                dataRead = rd;
//            }
//            return gotit;
//        }

//        public bool PowerOn()
//        {
//            bool on = false;
//            int cnt = 0;
//            while (!on && cnt < 3)
//            {
//                TelitWrite("AT\r");
//                on = getOK(15);

//                if (on)
//                {
//                    break;
//                }
//                PowerOnOff();
//                Thread.Sleep(15000);
//                cnt++;
//            }

//            return on;

//        }

//        private void TelitWrite(string txt)
//        {
//            r = System.Text.Encoding.UTF8.GetBytes(txt);
//            telit.Write(r, 0, r.Length);
//        }

//        public bool PowerOff()
//        {
//            bool on = true;
//            int cnt = 0;
//            while (on && cnt < 3)
//            {
//                TelitWrite("AT\r");
//                on = getOK(15);
//                if (!on)
//                {
//                    break;
//                }
//                PowerOnOff();
//                Thread.Sleep(4000);
//                cnt++;
//            }

//            return on;
//        }

//        private bool getOK(int loopCnt)
//        {
//            string rd = "";
//            byte[] r = new byte[1];
//            int cnt = 0;
//            bool gotit = false;
//            while (rd.IndexOf("\r\nOK\r\n") < 0 && cnt < loopCnt)
//            {
//                if (rd.IndexOf("ERROR") > -1)
//                {
//                    //p.DebugPrint("TELIT: " + rd + "\r\n");

//                    return false;
//                }
//                telit.Read(r, 0, 1);
//                rd += (char)r[0];
//                cnt++;
//            }
//            //p.DebugPrint("TELIT: " + rd + "\r\n");
//            if (rd.IndexOf("\r\nOK\r\n") > -1)
//            {
//                gotit = true;
//            }
//            curBuf = rd;
//            return gotit;
//        }

//        public bool SetupISP()
//        {
//            int tr = 0;
//            bool gotit = false;
//            while (!gotit && tr < 4)
//            {
//                byte[] send = System.Text.Encoding.UTF8.GetBytes("AT+CGDCONT=1,\"IP\",\"isp.cingular\"\r");
//                telit.Write(send, 0, send.Length);
//                System.Threading.Thread.Sleep(500);
//                ////string rd = "";
//                ////byte[] r = new byte[1];
//                ////int cnt = 0;
//                ////while (rd.IndexOf("\r\nOK\r\n") < 0 && cnt < 50)
//                ////{
//                ////    telit.Read(r, 0, 1);
//                ////    rd += (char)r[0];
//                ////    cnt++;
//                ////}
//                ////Debug.Print(rd);
//                ////if (rd.IndexOf("\r\nOK\r\n") > 0)
//                ////{
//                ////    gotit = true;
//                ////}
//                gotit = getOK(50);
//                if (gotit)
//                {
//                    gotit = false;
//                    TelitWrite("AT#USERID=\'WIXDC001@W5.MYCINGULAR.COM\'\r");
//                    getOK(60);
//                    TelitWrite("AT#PASSW=\'ZXY203DC9K0402\'\r");
//                    gotit = getOK(60);
//                }
//                tr++;
//            }
//            return gotit;
//        }

//        public string DownloadConfig()
//        {
//            return "";
//        }

//        private void PowerOnOff()
//        {
//            telitPower.Write(false);
//            Thread.Sleep(3000);
//            telitPower.Write(true);
//        }
//    }
//}
